import { getToken, setToken, removeToken } from '@/utils/auth'
import { loginAPI, getUserInfoAPI, getUserDetailByIdAPI } from '@/api/user'
export default {
  // 模块化加锁
  namespaced: true,
  // 定义变量
  state: {
    // 先从本地的Cookies中获取token，作为变量默认值
    token: getToken() || '',
    userInfo: {}
  },
  // 修改变量
  mutations: {
    /**
     * 存储token
     * @param {*} state 里所有变量
     * @param {*} val 调用方法拿到的值
     */
    setToken(state, val) {
      // 1.内存存一份
      state.token = val
      // 2.防止刷新，在硬盘存储一份
      setToken(val)
    },
    // 删除token
    delToken(state) {
      state.token = ''
      removeToken()
    },
    // 保存用户信息
    setUserInfo(state, val) {
      state.userInfo = val
    },
    // 删除用户信息
    reomveUserInfo(state) {
      state.userInfo = {}
    }

  },
  // 异步
  actions: {
    /**
   * 调用接口登录并且存储token
   */
    async loginAction(store, val) {
      // 1.发请求获取token
      const res = await loginAPI(val)
      console.log(res)
      // 2.存储token
      store.commit('setToken', res)
    },
    // 发送请求获取用户资料
    async getUserInfoAction(store) {
      const userInfo = await getUserInfoAPI()
      console.log(userInfo)
      // 获取用户的头像
      const avatorInfo = await getUserDetailByIdAPI(userInfo.userId)
      console.log(avatorInfo)
      // { ...userInfo, ...avatorInfo }合并两个对象的数据，并且保存到vuex中
      store.commit('setUserInfo', { ...userInfo, ...avatorInfo })
    },
    // 封装退出删除token和用户信息
    logoutAction(store) {
      store.commit('delToken')
      store.commit('reomveUserInfo')
    }

  }
}
